using System;
using System.Collections;

////////////////////////////////////////////////////////////////////////////////////////////////////
// namespace: Dimok
//
// summary:	.
////////////////////////////////////////////////////////////////////////////////////////////////////

namespace Dimok {
	[Serializable]
	public class HashTableEx : Hashtable{

		////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>	Default constructor. </summary>
		///
		/// <remarks>	Dimon, 11/23/2010. </remarks>
		////////////////////////////////////////////////////////////////////////////////////////////////////

		public HashTableEx() : base(){}

		////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>	Constructor. </summary>
		///
		/// <remarks>	Dimon, 11/23/2010. </remarks>
		///
		/// <param name="src">	Source for the. </param>
		////////////////////////////////////////////////////////////////////////////////////////////////////

		public HashTableEx(IDictionary src) : base(src){}

		////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>	Constructor. </summary>
		///
		/// <remarks>	Dimon, 11/23/2010. </remarks>
		///
		/// <param name="nameValue">	A variable-length parameters list containing name value. </param>
		////////////////////////////////////////////////////////////////////////////////////////////////////

		public HashTableEx(params object[] nameValue):base(){
		for( int i = 0; i < nameValue.Length; i += 2 )
		this.Add(nameValue[i],nameValue[i+1]);
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	string casting operator. </summary>
	///
	/// <remarks>	Dimon, 11/23/2010. </remarks>
	///
	/// <param name="ht">	The height. </param>
	////////////////////////////////////////////////////////////////////////////////////////////////////

	public static implicit operator string(HashTableEx ht){
			StringList sl = new StringList();
			foreach( string key in ht.Keys )
				sl.Add(key+" : ["+ht[key]+"]");
			return sl.Join(Environment.NewLine);
		}
	}
}
